<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>活体认证</title>
  <link href="./liveness.css" rel="stylesheet">
  <!-- uni 的 SDK -->
  <script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.1.js"></script>
</head>
<body>
  <script src="./liveness.js"></script>
  <script>
    let liveness = null
    // 预定义三个动作，单次活体检测只能选取其中一个动作进行。
    const livenessEnum = {
      BLINK: 0, // 眨眼
      MOUTH: 1, // 张嘴
      YAW: 2 // 摇头
    }
    // 是否通过
    let ifPassed = false

    function initLiveness(BASE_URL, token) {
      // 指定动作活体检测
      liveness = new Liveness({
        // 设置代理服务器地址
        host: BASE_URL,
        token,
        // 在用户采集到视频之后，请求公有云接口之前执行
        beforeCheck: function(data) {
          // console.log('请求公有云接口之前', JSON.stringify(data))
        },
        // 活体检测完成后的回调函数
        onChecked: function(data) {
          console.log('活体检测完成', JSON.stringify(data))
          const { passed, msg } = data
          ifPassed = passed
          if (passed) {
            showAlert('认证成功!', () => {
              uni.navigateBack({ delta: 1 })
            })
          } else {
            showAlert(msg)
          }
        },
        // 活体检测发生错误后的回调函数
        onError: function(data) {
          console.error('活体检测发生错误', JSON.stringify(data))
          const { message } = data
          showAlert(message)
        },
        // 本次活体检测使用的动作
        action: livenessEnum.BLINK,
      })

      // 指定动作活体检测与静默活体检测任选其一
      liveness.show()
    }

    // 弹出系统提示对话框
    function showAlert(msg, callback){
      plus.nativeUI.alert(msg, function() {
        callback && callback()
      }, "提示", "确认")
    }


    function hideLiveness() {
      if (!liveness) return
      liveness.hide()
    }

    document.addEventListener('UniAppJSBridgeReady', function() {
      uni.postMessage({
        data: {
          passed: ifPassed
        }
      })
      uni.getEnv(function(res) {
        console.log('当前环境：' + JSON.stringify(res))
        if (res.plus) {
          // 用这个方法获取存储的值都是带有双引号的, 需要把双引号替换
          const BASE_URL = plus.storage.getItem('BASE_URL')
          const ACCESS_TOKEN = plus.storage.getItem('ACCESS_TOKEN')
          if (ACCESS_TOKEN === '') return
          const baseUrl = BASE_URL.replace(/\"/g, "")
          const token = ACCESS_TOKEN.replace(/\"/g, "")
          console.log('当前环境为【5+App】', baseUrl, 'token:', token)
          /* 初始化活体验证实例 */
          initLiveness(baseUrl, token)
        }
      })
    })

  </script>
</body>
</html>